$.zhh.events.on("/basedata/settings/config-item/", function(space, initial, extras) {
	var v = { space:space };

	// 收集valueType, 初始化valueTypes的handler并绑定在v变量中
	var valueTypeEnums = [];
	ConfigPageVars.valueTypes.each(function() {
		var editor = this.handler.call(space, this.type);
		v[this.type] = editor;
		valueTypeEnums.push({ type:this.type, name:this.name });
	});

	function generateHtml(type, data) {
		return space.template(type, data);
	};
	function getAndSwitchActiveLines(form, valueType) {
		// 根据valueType显示对应的valueMetadata/configValue/configText
		var inactiveLines = form.find(".show-in-type:not(.show-in-" + valueType + ")");
		var activeLines = form.find(".show-in-" + valueType);
		inactiveLines.addClass("hide");
		inactiveLines.find(".textbox-f").each(function() { $(this).xcall("disable").xcall("disableValidation"); });
		inactiveLines.find("input[type=hidden]").prop("disabled", true);
		activeLines.removeClass("hide");
		activeLines.find(".textbox-f").each(function() { $(this).xcall("enable").xcall("enableValidation"); });
		activeLines.find("input[type=hidden]").prop("disabled", false);
		return activeLines;
	}
	v.onValueTypeChange = function(newValue, oldValue) {
		var form = $(this).closest("form");
		var valueType = newValue;
		// 根据valueType显示对应的valueMetadata/configValue/configText
		getAndSwitchActiveLines(form, valueType);
	};
	v.onUpdateFillData = function(e) {
		// configValue/configText需要根据valueType设置; visible/editable/usingState不是easyui控件, 需要通过fillForm设置
		e.form.form("load", $.extend({}, e.selected, { configValue:null, configText:null, visible:null, editable:null, usingState:null }));
		var valueType = e.selected.options.valueType;
		var valueMetadata = e.selected.options.valueMetadata;
		// 设置valueType
		e.form.find("input[textboxname=valueType]").xcall("setValue", valueType);
		// 根据valueType设置对应的configValue
		var activeLines = e.form.find(".show-in-type.show-in-" + valueType);
		var $valueMetadata = activeLines.find("input[textboxname=valueMetadata]");
		$valueMetadata.length && $valueMetadata.xcall("setValue", $.extend(true, {}, valueMetadata));
		var configValue = $.zhh.field(e.selected, "options.extra.original.configValue || configValue");
		activeLines.find("input[textboxname=configValue]").xcall("setValue", configValue);
		// visible/editable/usingState不是easyui控件, 需要通过fillForm设置
		e.form.fillForm({ visible:e.selected.visible, editable:e.selected.editable, usingState:e.selected.usingState });
	};
	v.onSetValueFillData = function(e) {
		e.form.form("load", $.extend({}, e.selected, { configValue:null, configText:null, visible:null, editable:null, usingState:null }));
		var valueType = e.selected.options.valueType;
		// 根据valueType显示对应的valueMetadata/configValue/configText
		var activeLines = getAndSwitchActiveLines(e.form, valueType);

		// 根据valueType设置对应的configValue, configText通过configValue.onChange设置
		var $configValue = activeLines.find("input[textboxname=configValue]");
		// 根据valueType处理对应的初始化逻辑
		var configValueInit = (v[valueType] || {}).configValueInit;
		// 先清空旧值, 然后生成form, 再设置新值
		$configValue.xcall("setValue", null);
		if ($.isFunction(configValueInit)) {
			configValueInit.call($configValue, e.selected.options.valueMetadata, generateHtml);
		}
		// 根据valueType设置对应的configValue, configText通过configValue.onChange设置
		$configValue.xcall("setValue", e.selected.configValue);
		// visible/editable/usingState不是easyui控件, 需要通过fillForm设置
		e.form.fillForm({ visible:e.selected.visible, editable:e.selected.editable, usingState:e.selected.usingState });

		// 根据editable设置是否可编辑
		var $configText = activeLines.find("input[textboxname=configText]");
		if (e.selected.editable) {
			$configValue.xcall("enable");
			$configText.length && $configText.xcall("enable");
		} else {
			$configValue.xcall("disable");
			$configText.length && $configText.xcall("disable");
		}
	};

	space.xui(v);

	space.find("input[textboxname=valueType]").xcall("loadData", valueTypeEnums);
});
